/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cl.orientesalud.dao.impl;

import cl.orientesalud.dao.Dao;
import cl.orientesalud.dao.DescuentoDao;
import cl.orientesalud.dominio.Descuento;
import cl.orientesalud.dominio.TipoTratamiento;
import cl.orientesalud.dominio.Tratamiento;
import cl.orientesalud.util.OrienteLog;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;

/**
 *
 * @author nicolas
 */
public class DescuentoDaoImpl extends Dao implements DescuentoDao{
    Logger logger=OrienteLog.obtenerLogger(DescuentoDaoImpl.class);
    @Override
    public List<Descuento> obtenerDescuentos() throws Exception {
        List<Descuento> descuentos=null;
        PreparedStatement pstmt=null;
        Descuento descuento;
        ResultSet rs=null;
        String consulta="SELECT desc_id,"
               + "      desc_nombre,"
               + "      desc_valor "
               + "from descuento ";
        try {
            pstmt = conexion.preparedStatement(consulta);
            rs=pstmt.executeQuery();
            descuentos=new ArrayList();
            while(rs.next()){
                descuento=new Descuento();
                descuento.setId(rs.getInt("desc_id"));
                descuento.setDescripcion(rs.getString("desc_nombre"));
                descuento.setValor(rs.getLong("desc_valor"));
                descuentos.add(descuento);
            }
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
       
        return descuentos;
    }

    @Override
    public List<Descuento> obtenerDescuentos(TipoTratamiento tipoTratamiento) throws Exception {
        List<Descuento> descuentos=null;
        PreparedStatement pstmt=null;
        Descuento descuento;
        ResultSet rs=null;
        String consulta="SELECT desc_id,"
               + "      desc_nombre,"
               + "      desc_valor "
               + "from descuento "
                + "where tt_id=?";
        try {
            pstmt = conexion.preparedStatement(consulta);
            pstmt.setInt(1, tipoTratamiento.getId());
            rs=pstmt.executeQuery();
            descuentos=new ArrayList();
            while(rs.next()){
                descuento=new Descuento();
                descuento.setId(rs.getInt("desc_id"));
                descuento.setDescripcion(rs.getString("desc_nombre"));
                descuento.setValor(rs.getLong("desc_valor"));
                descuento.setTipoTratamiento(tipoTratamiento);
                descuentos.add(descuento);
            }
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
       
        return descuentos;
    }

    @Override
    public Long obtenerTotal(Tratamiento tratamiento) throws Exception{
        
            Long total = null;
            String consulta="SELECT sum(d.desc_valor) "
                   + "from descuento d,tratamiento_descuento td "
                    + "where d.desc_id=td.desc_id "
                    + "and td.trat_id=?";
            PreparedStatement pstmt=null;
            ResultSet rs=null;
            try {
                pstmt = conexion.preparedStatement(consulta);
                pstmt.setInt(1, tratamiento.getId());
                rs=pstmt.executeQuery();
                if(rs.next()){
                    total=rs.getLong(1);
                }
            } catch (SQLException ex) {
                logger.error("Error:"+ex.getMessage());
                throw new Exception("Error en el sistema");
            }
            return total;
    }

    @Override
    public void modificarDescuento(Descuento descuento) throws Exception{
        PreparedStatement pstmt=null;
        String sentencia="UPDATE DESCUENTO "
                + "       SET desc_nombre=?,"
                + "           desc_valor=? "
                + "WHERE desc_id=?";
        try {
            pstmt = conexion.preparedStatement(sentencia);
            pstmt.setString(1, descuento.getDescripcion());
            pstmt.setLong(2, descuento.getValor());
            pstmt.setLong(3, descuento.getId());            
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
    }

    @Override
    public void ingresarDescuento(Descuento descuento) throws Exception{
        PreparedStatement pstmt=null;
        String sentencia="INSERT INTO descuento (tt_id, desc_nombre, desc_valor) values(?,?,?)";
        try {
            pstmt = conexion.preparedStatement(sentencia);
            pstmt.setLong(1, descuento.getTipoTratamiento().getId());
            pstmt.setString(2, descuento.getDescripcion());
            pstmt.setLong(3, descuento.getValor());            
            pstmt.executeUpdate();
        } catch (SQLException ex) {
            logger.error("Error:"+ex.getMessage());
            throw new Exception("Error en el sistema");
        }
    }
    
}
